<!--
* @description  
* @fileName  3_列表过滤
* @author zhoujunlin
* @date 2022-03-06 16:44:02
* @version V1.0.0
!-->
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>3_列表过滤</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="app">
        <h2>人员列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyword">
        <ul>
            <li v-for="(p,index) of filterPersons" :key="p.id">
                {{p.name}}-{{p.age}}-{{p.sex}}
            </li>
        </ul>
    </div>

    <script>
        Vue.config.productionTip = false
        // 监视器实现
        /* var vm = new Vue({
            el: '#app',
            data() {
                return {
                    keyword: '',
                    persons: [
                        { id: '001', name: '马冬梅', age: 19, sex: '女' },
                        { id: '002', name: '周冬雨', age: 20, sex: '女' },
                        { id: '003', name: '周杰伦', age: 21, sex: '男' },
                        { id: '004', name: '温兆伦', age: 22, sex: '男' }
                    ],
                    filterPersons: []
                }
            },
            watch: {
                keyword: {
                    // 初始化的时候让handler调用一下,因为开始filPerons: []为空数组,
                    // 页面上什么内容都不显示,而恰巧handler(val)获取的值为空,
                    // 而所有字符串第0位不仅包含自己第一个字符,也包含着一个空字符,p.name.indexOf('')为0 
                    // 所以handler(val)函数判断成功,页面显示内容
                    immediate: true,
                    handler(val) {
                        // 原数组不变  产生新数组赋值给filterPersons
                        this.filterPersons = this.persons.filter((p) => {
                            return p.name.indexOf(val) != -1
                        })
                    }
                }
            }
        }); */
        // 计算属性实现
        var vm = new Vue({
            el: '#app',
            data() {
                return {
                    keyword: '',
                    persons: [
                        { id: '001', name: '马冬梅', age: 19, sex: '女' },
                        { id: '002', name: '周冬雨', age: 20, sex: '女' },
                        { id: '003', name: '周杰伦', age: 21, sex: '男' },
                        { id: '004', name: '温兆伦', age: 22, sex: '男' }
                    ]
                }
            },
            computed: {
                filterPersons() {
                    // keyword发生改变 filterPersons重新计算渲染
                    return this.persons.filter((p) => {
                        return p.name.indexOf(this.keyword) != -1
                    })
                }
            }
        });

    </script>
</body>

</html>